package com.yami.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.app.dto.OrderCountData;
import com.yami.shop.bean.dto.StatisticsRefundDto;
import com.yami.shop.bean.model.Order;
import com.yami.shop.bean.param.OrderPayParam;
import com.yami.shop.bean.param.StatisticsRefundParam;

import java.util.Date;
import java.util.List;

/**
 * @author lgh on 2018/09/15.
 */
public interface StatisticsOrderService extends IService<Order> {


    /**
     * 根据店铺id获取支付数据
     * @param shopId 店铺id
     * @param  startTime 开始时间
     * @param  endTime 结束时间
     * @return 根据店铺id获取支付数据
     */
    OrderPayParam getPayUserCountByshopId(Long shopId, Date startTime, Date endTime);

    /**
     * 根据时间和店铺id获取分段时间数据
     * @param shopId 店铺id
     * @param  startTime 开始时间
     * @param  endTime 结束时间
     * @return 根据时间和店铺id获取分段时间数据
     */
    OrderPayParam getActualTotalByHour(Long shopId, Date startTime, Date endTime);

    /**
     * 根据天数和店铺id获取分段时间数据
     * @param shopId 店铺id
     * @param  startTime 开始时间
     * @param  endTime 结束时间
     * @return 根据天数和店铺id获取分段时间数据列表
     */
    List<OrderPayParam> getActualTotalByDay(Long shopId, Date startTime, Date endTime);


    /**
     * 根据ID获取退款单信息
     * @param  shopId 退款商家ID
     * @param  startTime 开始时间
     * @param  endTime 结束时间
     * @return 退款信息包装对象
     */
    StatisticsRefundParam getOrderRefundByShopId(Long shopId, Date startTime, Date endTime);

    /**
     * 根据ID获取分段退款单信息
     * @param  shopId 退款商家ID
     * @param  startTime 开始时间
     * @param  endTime 结束时间
     * @return 退款信息包装对象
     */
    List<StatisticsRefundParam> getOrderRefundByShopIdAndDay(Long shopId, Date startTime, Date endTime);

    /**
     * 根据商品ID获取退款信息排行
     * @param  statisticsRefundDto
     * @return 退款信息包装对象
     */
    List<StatisticsRefundParam> getRefundRankingByProd(StatisticsRefundDto statisticsRefundDto);

    /**
     * 根据退款原因获取退款信息排行
     * @param  shopId 退款商家ID
     * @param  beginTime 开始时间
     * @param  endTime 结束时间
     * @return 退款信息包装对象
     */
    List<StatisticsRefundParam> getRefundRankingByReason(Long shopId, Date beginTime, Date endTime);

    /**
     * 查询店铺订单各状态数量
     * @param shopId
     * @return
     */
    OrderCountData getOrderCountOfStatusByShopId(Long shopId);
}
